package com.codewsq.java.thread;

/*
 *
 * 1. 继承Thread类的方式实现多线程
 * */
class MyThread extends Thread {

    @Override
    public void run() {
        /*setPriority(NORM_PRIORITY);*/
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(getName() + ":" + i);
                if (i > 30) {
                    try {
                        this.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            if (i % 20 == 0) {
                this.yield(); // cpu放弃当前线程并重新切换线程执行，有可能又切换回当前线程并继续执行
            }
        }
        System.out.println(getName() + "的线程优先级为：" + getPriority());
    }
}


public class ThreadTest {

    public static void main(String[] args) {

        MyThread m1 = new MyThread();
        m1.setName("线程一"); // 设置线程名称
        // 线程的优先级大小并不是指一定会优先运行优先级大的线程，只是一定程度上增加被cpu选中的概率，并不绝对
        m1.setPriority(Thread.MAX_PRIORITY); // 设置线程优先级 优先级为最大优先级 10 ，最小是 1 ， 默认是 5
        m1.start();
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY); // 设置线程优先级为最小级别 1
        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 100; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i + "******main*****");
            }
            /*if (i == 20) {
                try {
                    m1.join(); // i==20,那么进入m1线程中运行，此时主线程进入阻塞状态，并直至m1线程运行完毕才继续切换运行主线程
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }*/
        }
        System.out.println(Thread.currentThread().isAlive());
        System.out.println(m1.isAlive());
    }
}
